package com.gitee.zycra.union.api.manager;

import com.gitee.zycra.jdbc.model.PageResult;
import com.gitee.zycra.union.api.common.bo.PageQuery;
import com.gitee.zycra.union.api.common.model.ApiMockTemplate;
import com.gitee.zycra.union.api.common.param.PageQueryMockTemplateParam;
import com.gitee.zycra.union.api.common.util.IdGenerator;
import com.gitee.zycra.union.api.common.vo.MockTemplateVO;
import com.gitee.zycra.union.api.dao.ApiMockTemplateDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;

/**
 * @author zycra
 */
@Component
public class ApiMockTemplateManager {

    @Autowired
    private ApiMockTemplateDao apiMockTemplateDao;

    @Autowired
    private IdGenerator idGenerator;

    /**
     * 添加mock模板
     *
     * @param groupId      项目组ID
     * @param templateName 模板名称
     * @return 影响行数
     */
    public int addMockTemplate(Long groupId, String templateName) {
        return apiMockTemplateDao.insert(new ApiMockTemplate().setId(idGenerator.nextId())
                .setTemplateName(templateName)
                .setGroupId(groupId));
    }

    /**
     * 更新mock模板
     *
     * @param id           模板ID
     * @param templateName 模板名称
     * @return 影响行数
     */
    public int updateMockTemplate(Long id, String templateName) {
        return apiMockTemplateDao.updateById(new ApiMockTemplate().setId(id).setTemplateName(templateName));
    }

    /**
     * 删除nock模板
     *
     * @param id 模板ID
     * @return 影响行数
     */
    public int deleteMockTemplate(Long id) {
        return apiMockTemplateDao.updateToDelete(id);
    }

    /**
     * 查询mock模板
     *
     * @param pageQuery 查询参数
     * @return 查询结果
     */
    public PageResult<MockTemplateVO> selectMockTemplateForPage(PageQuery<PageQueryMockTemplateParam> pageQuery) {
        PageResult<ApiMockTemplate> pageResult = apiMockTemplateDao.selectMockTemplateForPage(pageQuery);
        List<ApiMockTemplate> data = pageResult.getData();
        List<MockTemplateVO> list = new ArrayList<>();
        for (ApiMockTemplate mockTemplate : data) {
            list.add(MockTemplateVO.buildInterfaceCaseVO(mockTemplate));
        }
        return new PageResult<>(pageQuery.getPage(), pageResult.getTotal(), list);
    }
}
